Skip to content

feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name - #172

Open
Eric Smith (motionBuilderEric) wants to merge 49 commits into
stagingfrom
eric/aligned-onboarding-v2-meta-package
Open

feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name#172
Eric Smith (motionBuilderEric) wants to merge 49 commits into
stagingfrom
eric/aligned-onboarding-v2-meta-package

Conversation

@motionBuilderEric

@motionBuilderEric Eric Smith (motionBuilderEric) commented Jul 22, 2026

Copy link
Copy Markdown

Meta and VoC Onboarding (meta-and-voc-onboarding, package version 1): Meta onboarding (Cacheth-first, three steps + Field 10 deck spec), VoC data pull, Knoweth organize, ad-performance + walkthrough skills, installable by name, corpus-search removed

Summary

Replaces the legacy Aligned Onboarding payload with the meta-and-voc-onboarding/ folder: one part per subfolder — meta/, voc-data-pull/, voc-audit/, knoweth/, meta-ad-performance-analysis/, and onboarding-walkthrough/ — with a single combined README and a real schema-v1 package.json manifest (package version 1; versions are simple integers bumped once per package update) mapping every file. The package is registered in the repo root package-index.json with installPolicy: manual - nothing installs it except one explicit package install "github:Motion-Creative/runneth-apps/meta-and-voc-onboarding#main" call. The completed install records selected intent, so it survives VM rebuilds, and updatePolicy: auto rolls out merged updates; uninstall is clean. The canonical install message carries the kickoff clause ("...then read /agent/brain/meta-and-voc-onboarding/post-install.md and execute its install-time sequence in this conversation" - exact copy-paste text in the package README), so the installing conversation runs the full setup end to end; an activation package instruction staged with the files backstops later sessions. Measured end-to-end on staging, install-to-gap-questions went from 16m08s to 10m47s versus the old LLM-copied install-config.json flow. Creative content is Cacheth-first (no per-creative files anywhere), the Meta flow runs as three steps (Creative Attributes → Account Context Brain → Validation) with Field 10 as the deck spec, 17 VoC platforms get standardized raw-data pulls with daily sync routines, Knoweth gets an organize-the-brain part grounded in the real retrieval wiring, and the corpus-search/ tool is removed. Everything the package persists is workspace-scoped — one /agent/brain/<workspace>/ folder per workspace, workspace-agnostic guards, a per-workspace activation roster, and a per-workspace pinned account for each VoC platform — so several workspaces on one org VM onboard additively. This targets the staging deployment, where retrieval runs on Knoweth and creative summaries live in Cacheth, so nothing in the package builds or depends on a local search index.

What changed

Meta part (meta/), three steps plus two supporting references:

  • meta-creative-attributes-playbook.md — Step 1 (renamed from Creative Attribution: the step establishes attributes of the creative, not spend attribution). The creative-content-layer contract plus naming decode: creative content lives in Cacheth (the local creative cache), queried via Knoweth pre-context injection first, then the motion cache CLI (search-summaries / get-creative; local, no API call). No per-creative files are written. The decode is a handoff: detected provisionally here (including where product tokens live across name levels) and folded into the Account Context Brain (Field 4) on confirmation.
  • meta-account-context-brain-onboarding-package.md — Step 2, v1.31. Nine required interpretation fields plus Field 10 (the deck spec), opening brand frame, closing TLDR. Field 4 owns the confirmed naming decode and writes the operational decoder to /agent/brain/<workspace>/data-sources/meta/naming-decoder.json (typed positions, query fields, _VALUE_ filter patterns, LP-reference decode); it also detects and confirms where product names live. Field 9 is structured around four captures (ranking metric, CPA target, winner/cut criteria incl. spend floor, default reporting window). Field 10 (reporting structure + marketing calendar) synthesizes from Fields 4/7/9 with no new pull — it gates the validation deck, not the question loop, is offered as fill-in Step 5 once its inputs confirm, and is saved as the deck-spec section of account-context.md. The fill-in presentation has a required three-part output schema (opening frame, field sections, closing TLDR) with a literal skeleton and pre-send checklist — structure fixed, content account-specific. The "at a glance" section can carry a one-line answer-register note written by validation's register corrections. Persists to /agent/brain/<workspace>/data-sources/meta/account-context.md with a read-before-performance guard merged into /agent/user.md.
  • meta-validation-onboarding-package.md — Step 3, v1.12. The answer-and-confirm loop with the show-the-work rule (each answer states which filter, signal, and name level it used), the show-the-creatives rule (referenced creatives render as a gallery per the Data-Query Guide contract), register corrections (how an answer is pitched is correctable like any fact; standing preferences persist to account-context.md), a name-level probe starter question ("show me all our [product] ads"), and a conditional customer-voice starter question when the workspace's VoC audit exists; validation.md written incrementally after every confirmed answer so interrupted validations resume instead of restarting; starter question 4 uses neutral testing-vs-scaling language with a single-pool fallback; the weekly deck build pre-filled from the Field 10 deck spec (no deck without it — an unconfirmed spec runs its two beats at deck time; questions-only customers never need it); lock-in (deck approval, refresh routine, Slack); and the MVCE gate, which ends with an explicit handoff to the Knoweth organize part. Validation runs as a training loop: every piece of feedback routes through a durability test (judgment rules heal ACB fields, standing preferences persist to the register note or Field 10, current-state facts shape the answer only, one-offs revert on refresh), and deck change requests are context corrections — the deck regenerates from context and is never hand-edited. Gates on cache coverage, not files.
  • motion-cli-data-query-guide.md — the canonical contract for Motion CLI pulls, now Meta-only (TikTok insights, brand-specific metric gotchas, and the workspace-goal / spend-threshold commands removed). New "Which name level to filter on" section: product/theme words legitimately cascade across campaign, ad set, and ad names; bare product names default to adName + includes; never silently swap levels. Adds the WHAT-vs-WHY evidence split (live metrics answer what; Cacheth creative content and VoC answer why, with ad comments bridging the two; metrics pick the set, content explains it), the presenting-creatives contract (creatives render as a gallery of cards with media from the Cacheth record's url — the insights mediaUrl is often null on ASC — and names always decoded through naming-decoder.json), and the answering-posture section (judgment over rules: report data-answerable questions plainly, offer interpretation instead of dumping it, respect mode signals like "just the numbers"). Performance metrics are pulled live, never stored.
  • cacheth-command-reference.md — the flag-level contract for the five motion cache commands. motion cache status runs first as a one-shot access check; exports are a two-hop flow (the command's workdir wrapper file carries .providers.<provider>.path pointing at the JSONL corpus in Cacheth's own storage); transcripts and AI glossary tags exist only on the full record via get-creative — export, search, and Knoweth injection are summary-level (ad metadata, copy, media URLs, summary text). Cacheth itself is a hydration layer behind the CLI, transparent to the agent; Knoweth indexes the summary artifacts generated from it, never the complete records.

VoC Data Pull part (voc-data-pull/):

  • SKILL.md plus references/platform-recipes.md and four output templates, installed to the skills root (/agent/.agents/skills/voc-data-pull/). Pulls raw voice-of-customer data — reviews, support conversations, community posts, ad comments — from 17 platforms (Judge.me, Trustpilot, Yotpo, Junip, Okendo, Stamped, Reviews.io, Gorgias, Intercom, Zendesk, Klaviyo, Attentive, Gong, Hotjar, Discord, YouTube, Reddit, plus Meta ad comments) into standardized files under /agent/brain/<workspace>/data-sources/voc/<platform>/, one id-keyed file per item. Meta ad comments are the standard pull of every onboarding (any org with Meta connected gets them, no discovery or account pin): they land beside the other platform folders as one file per creative under voc/meta-ad-comments/ (creative-<creative_asset_id>.md), each carrying every comment (author, date, per-comment facebook/instagram platform, reactions, replies nested under parents), the creative's preview URL when the payload returns one (previewFileUrl — the payload carries no post permalink), and the total comment count, with field names mapped 1:1 from the verified motion meta creative-comments payload. Coverage is by availability (OAuth, stored API key, or Motion native), with a raw-VoC save exemption and the Reddit full-window contract.
  • Recipes are resilient by mandate (Step 2): the live API is the truth and a stale recipe never stops a pull — adapt field names, endpoints, and pagination from real responses, stop only when external_id/created_at genuinely don't exist. Docs are single-sourced: per-platform evidence levels and caveats live only in each recipe's header (Junip live-verified, Yotpo since_date corrected, the eight new platforms doc-grounded), and the coverage contract (12-month window, page-cap resume, coverage reporting) is owned solely by SKILL.md's hard boundaries.
  • Setup runs at post-install for every reachable platform, or on request afterwards: one daily routine per workspace per platform (voc-sync-<workspace>-<platform>, 6am), first run backfills 12 months in the background, daily runs pull only new items. Pulls never run inside the installing conversation.

Knoweth organize part (knoweth/):

  • knoweth-organize-onboarding-package.md — the cross-cutting organize-the-brain part: after the account questions are answered and content has landed, organize retrieval (shared content in the global lane, sliced with tags and a naming decoder) and hold it with two sentinel guard blocks merged into /agent/user.md. Grounded in the real harness wiring: only global, user:<userId>, and project:<workspaceId> are queried today; data-source-family lanes are a documented forward path gated on a harness change. Durable done-marker: /agent/brain/<workspace>/_tag-vocabulary.md. v1.1: gate 2 gains a file-based coverage fallback for VoC data that landed without a sync routine.

Meta Ad Performance Analysis skill (meta-ad-performance-analysis/):

  • Diagnostic framework for one ad, a set of ads, or the account in general, installed to the skills root: primary KPI first, efficiency against the account's own averages, then the funnel trace (first frame retention, thumbstop, hold rate, engagement, CTR outbound, conversion rate, AOV); across many ads, group by optimization goal and rank by primary-KPI efficiency before diagnosing, tying every funnel diagnosis to what the creative actually says and shows. Output renders analyzed ads as a gallery with decoder-normalized names. Interpretation comes from account-context.md (guard-enforced), metrics from live CLI pulls, name filters through the confirmed decode. On-demand only.

Onboarding Walkthrough skill (onboarding-walkthrough/):

  • The presentation layer for onboarding, installed to the skills root: post-install ends by asking "Are you ready to begin your onboarding?", and the walkthrough — opening brand frame, field-by-field findings with the gap questions only a human can answer, closing TLDR — fires only on a human's yes to that invitation or an explicit ask to begin/resume onboarding. Outside that, nothing self-runs.

Voice of Customer Audit skill (voc-audit/):

  • The manually triggered compiled layer over synced VoC, installed to the skills root: with at least 200 total entries across reviews, support conversations, ad comments, community posts, and surveys, it compiles five creative-strategy buckets (plus evidence-backed personas for products with 200+ entries) into one canonical page per workspace at /agent/brain/<workspace>/data-sources/voc/voice-of-customer-audit.md, Knoweth-indexed with raw-item citations. The workspace's first fully covered backfill offers the audit once (the offer recorded in the workspace _changelog.md); it runs only on a person's yes or explicit request — never on connection, sync, install, or daily refresh — and approved reruns regenerate the page rather than duplicating it. meta-ad-performance-analysis reads it for customer-side WHY and what-to-make-next questions; raw pulls and post-install never create it, and its absence at install is expected.

Multi-workspace scoping and VoC account pinning:

  • One folder per workspace: everything the package persists lives under /agent/brain/<workspace>/ — the Meta interpretation layer under data-sources/meta/, VoC items under data-sources/voc/<platform>/, _tag-vocabulary.md and the workspace _changelog.md at the workspace root. The folder name derives from one mechanical slug rule (lowercase, every run of non-alphanumerics becomes one hyphen, trim edge hyphens; "Mr. Beast" -> mr-beast), stated identically everywhere the slug appears. The staged package folder (/agent/brain/meta-and-voc-onboarding/) stays shared and workspace-agnostic.
  • The four /agent/user.md guard blocks carry no workspace IDs — they resolve the conversation's workspace at runtime and merge once per VM. A runneth:meta-voc-onboarded roster block in /agent/user.md records which workspaces completed post-install; guard-sentinel presence alone does not count as proof. A second workspace on an already-guarded VM onboards additively (new folder, roster append, nothing of the first touched), and an explicit reinstall or upgrade re-runs post-install as a resume, never a restart.
  • VoC integration accounts are org-level, and several accounts of one provider can coexist on one org (for example two Judge.me accounts). Each workspace pins the specific account a human confirmed it owns (auto-pin only when the org has exactly one workspace and the provider exactly one account); sync routines carry the workspace folder path, workspace id, and pinned account id literally in their prompts. Pulls never touch another account, a disconnected pin reports rather than falling back, and onboarding never drives new connections — it only confirms ownership of existing ones. The mandatory routine prompt template has explicit variants for all three connection paths: pinned account (--account), stored secret (named key + confirmed identity), and Motion-native meta-ad-comments (--workspace-id scope, no account).

corpus-search removed:

  • corpus-search/ deleted entirely. Root README.md and MIGRATION.md updated so the compatibility set is now just building-integrations; manifest-name references corrected to package.json. The removed payload stays recoverable from archive/full-library and the pre-cleanup tag.

Install mechanics (package manager):

  • install-config.json is gone; meta-and-voc-onboarding/package.json (schema v1, version 1, categories: [], installPolicy: manual, updatePolicy: auto, uninstallPolicy: allowed) maps every doc, the four skills, the staged guard files, and the activation instruction. Registered in package-index.json (source github at main). One package-manager call stages everything deterministically; a branch ref instead of #main is only for testing an unmerged branch or PR.
  • The four /agent/user.md guard blocks ship as ready-made staged files (guards/, byte-identical to the blocks embedded in the docs), merged in one whole-file Write — byte-for-byte with no install-time token substitution (the blocks are workspace-agnostic and resolve the conversation's workspace at runtime), with a mandatory pre-write check that the base document and each sentinel pair appear exactly once.
  • The repo-only meta-and-voc-onboarding/CHANGELOG.md (never staged to customer brains) is a single v1 entry describing the package as it ships; each staged doc keeps its version header.

Activation model (instructions/activation.md + post-install.md):

  • The canonical install message tells the agent to read post-install.md and execute its install-time sequence in the same conversation; an activation package instruction staged with the files also lands in the agent's standing instructions as a backstop for later sessions. The sequence is idempotent per workspace (the runneth:meta-voc-onboarded roster in /agent/user.md is the ran-already marker; an explicit reinstall or upgrade re-runs as a resume, never a restart): reachability check (OAuth connections, stored secrets, Meta workspace), VoC sync setup for every reachable platform with first runs kicked (a connected Meta workspace counts — voc-sync-<workspace>-meta-ad-comments via ad comments), account pinning confirmed with a human when ownership cannot be auto-resolved, the guard merge, Creative Attributes, and the Account Context Brain autofill running silently (results persisted to the brain); it ends by asking "Are you ready to begin your onboarding?" — the findings presentation and gap questions fire only on a human's yes, via the onboarding-walkthrough skill. What the guards gate (Knoweth organize, Meta validation) still fires later on its own gates. One status line per part; if nothing is reachable, it says so and stops (no polling — later connects are set up on ask).
  • Post-install is tuned for staging VMs: canceled routines are terminal (never resumed), the edit/patch tool is never used, existing files are read-then-written-whole.
  • Post-install's checks are mechanical, not judgment calls: stored secrets are probed per documented key (secret run --env KEY=<SECRET_KEY> -- true or a bounded secure-fetch run — the secret store has no list command, and a refused directory read proves nothing), the guard merge writes the four workspace-agnostic blocks verbatim with no workspace stamping (Knoweth project:<workspaceId> lane syntax stays literal), the Creative Attributes and Account Context steps read their playbooks at explicitly named staged paths (/agent/brain/meta-and-voc-onboarding/meta-creative-attributes-playbook.md, .../meta-account-context-brain-onboarding-package.md) and never improvise if one is unreadable, the account-context brain file is written as a prose reference document and indexed in /agent/INDEX.md at install, and the end-of-run readiness report is template-only status lines — no metrics, counts, or decoder detail in the report or the narration around it, and "done" is terminal: a part that completed through a fallback or degraded path is still exactly "done" (the how belongs in the brain file), with blocked - <reason> among the allowed states.
  • Creative ingestion still runs only through the Cacheth sync, and the ad-performance skill stays on-demand; nothing in the package writes per-creative files to the brain.

Notes for reviewers

  • Family/business lanes need the harness to layer configured lanes into the requested read set (resolveKnowethReadLanes requests exactly [user, project:<workspaceId>, global] today). Needs an owner; fits PDEC-9225.
  • The VoC pull flow was E2E-tested live on a fresh sandbox: skill install, routine creation, 12-month backfill, and an incremental re-run verified.
  • Field 10's marketing-calendar detection reads campaign-type and launch-date positions from the account's naming-decoder.json — never an assumed offset; if the decoder carries neither, it asks for the calendar directly.
  • This PR leaves scripts/validate-runneth-package-index.mjs untouched — the validator update for the current contract (integer versions, empty categories, github source) lands separately in fix(packages): align package index validation contracts #184. The fleet-approval gate still applies: this PR registers a managed-sync package, so it needs the runneth-fleet-change-approved label after core engineering approval (not self-applied).
  • Known platform bugs (fixes belong in agent-builder): the Edit tool fails validation on staging VMs, and /agent/user.md is blocked from Bash (hence the single-Write guard merge).
  • The package describes desired state only and never instructs workarounds: if an install fails, both READMEs tell the agent to report the exact error and stop - never hand-copy staged files or edit state under /agent/.runneth/packages/. Hand-written package state has produced invalid installed.json entries in the field that blocked every later turn on the VM.

Staging validation

  • End-to-end branch installs on staging, each graded from the conversation trace (Runneth thinking + tool calls) against a 13-point rubric covering install mechanics, the unprompted post-install sequence, the Cacheth decode flow, guard placement, and report discipline: Motion Crew, Buoy (4,339 cached creatives), Huel (766), Huel EU, Tentbox, and ecko digital.
  • Final clean-slate re-runs (full uninstall first) on the two cache-enabled workspaces: Huel EU 13/13, Motion Crew 12/13 — the single miss was trace observability in a contaminated conversation, not package behavior.
  • A sterile fresh-conversation run confirmed the activation model end to end: the post-install sequence fires unprompted on the first turn after install (package instructions inject at turn start), reads the staged playbook, and runs the Cacheth flow.
  • A cache-disabled sandbox exercised the documented error path: one motion cache status call, blocker recorded, step stopped with no retry loops — exactly as the playbook prescribes.
  • Three clean-slate branch installs (True Classic and one other workspace) verified the mechanical post-install contract point by point: flat doc paths with zero ENOENT, exactly one package install with no retries or hand-copying, the guard merge matching the staged blocks while project:<workspaceId> stays literal, secrets probed only via secret run, and the readiness report matching the template byte-for-byte — including a Cacheth-disabled run whose Creative Attributes line rendered as bare done with the blocker recorded in the brain file, and a run with pre-existing /agent/user.md content proving the guard merge appends rather than overwrites.
  • Clean-slate branch install on the GR0 staging org (Mr. Beast workspace) verified the workspace-scoped flow: folder resolved to mr-beast, Meta files under data-sources/meta/, workspace-agnostic guards merged, roster written, the workspace's Meta ad-comments sync routine created with the backfill running in background, readiness report status-only. Multi-account pinning has no live fixture on GR0 (no VoC provider with two connected accounts); the pin flow is exercised by review only so far.
  • Platform-level issues observed and deliberately out of scope (fixes belong in agent-builder): package uninstall leaves merged guard blocks and brain files on disk, and transient harness errors that retried cleanly.

Test plan

  • Package index validation passes once fix(packages): align package index validation contracts #184's validator lands
  • The canonical install message (package install "github:Motion-Creative/runneth-apps/meta-and-voc-onboarding#main" + the kickoff clause) stages every file and runs the post-install sequence in the same conversation
  • Confirm the post-install run creates one voc-sync-<workspace>-<platform> routine per reachable platform, kicks backfills in the background, and never pulls VoC data in-conversation
  • Confirm no path in the staged docs triggers automatic creative ingestion, and that a VM with nothing reachable gets a stop-and-say-so (no polling)
  • Confirm the four guard blocks merge at post-install and Knoweth organize / Meta validation still wait on their own gates
  • Confirm the Knoweth organize step runs once per workspace (gated on the workspace's _tag-vocabulary.md) behind its already-merged guard blocks
  • Confirm the validation question loop starts on the nine confirmed fields without Field 10, and the deck build refuses until Field 10 is confirmed (running its two beats at deck time)
  • Confirm the name-level probe answer states which name level it filtered
  • Meta ad-comments backfill writes one file per creative under voc/meta-ad-comments/, with per-comment entries, totals, and no invented URLs
  • Second workspace on an already-onboarded VM onboards additively: roster append, sibling /agent/brain/<workspace>/ folder, nothing of the first workspace touched
  • A VoC provider with two connected accounts requires a human ownership confirmation, and every sync pull passes the pinned --account

…docs, drop corpus-search

Replaces the Aligned Onboarding payload with the v2 package: Creative
Attribution playbook (runs first, explicit request only), Account Context
Brain onboarding package v1.21, new Meta Validation package v1.1, and the
Motion CLI data-query guide. Removes the corpus-search tool and its
references; retrieval runs on Knoweth with per-creative summaries in Cacheth
(staging). Nothing self-runs on install: the attribution build and its
maintenance never auto-grab creatives and store summary files in the brain.
Drops the orchestration skill and rebuilds install-config.json (v2.0.0).
@motionBuilderEric
Eric Smith (motionBuilderEric) marked this pull request as ready for review July 22, 2026 23:05
@motionBuilderEric
Eric Smith (motionBuilderEric) requested a review from a team July 22, 2026 23:05
…ect-time auto-install and self-activating daily sync (#159)

* feat(package): add voc-data-pull v0.1.0, auto-installed on VoC platform connect

Installer package that pulls raw voice-of-customer data - product reviews,
support conversations, and ad comments - from a connected platform into
standardized files in the org brain: one file per review/ticket/comment,
flat metadata header + body, untouched platform payload preserved in every
file (PDEC-9193, PR 1 of 2).

- skill/SKILL.md: the pull workflow - resolve the connection path
  (Pipedream OAuth via integrations proxy, stored secret via secure-fetch,
  Motion native for Meta ad comments), follow the platform recipe, write
  files under /agent/brain/data-sources/<platform>/. Hard boundaries:
  read-only against platforms, bounded pulls (12-month default, page caps),
  never write into /agent/brain/integrations/<source>/, author_contact
  nulled pending the PII policy call.
- skill/references/platform-recipes.md: per-platform endpoints, pagination,
  discovery steps, and unified-template field mappings with evidence
  levels. Judge.me/Gorgias/Intercom live-verified; Trustpilot/Yotpo
  doc-grounded pending first connects; Junip blocked on a dead key;
  Okendo/Stamped are secrets-path (no Pipedream app exists); Meta ad
  comments via motion meta creative-comments.
- skill/templates/: copyable review and support-conversation file skeletons
  (support shape follows the Ramy Brook Gorgias precedent:
  daily/<date>/ticket-<id>.md, metadata top, full conversation below).
- package.json manifest: one directory resource installing the skill to
  agent_skills/voc-data-pull; installPolicy auto so matching intent
  installs with no manual step, updatePolicy auto so recipe fixes roll out.
- package-index.json: first indexed package. Categories list one
  integration:<slug> per platform (judge_me, trustpilot, yotpo, junip,
  gorgias_oauth, intercom, okendo, stamped) because the VM reconciler
  matches literal connected slugs - no invented family category.
- scripts/validate-runneth-package-index.mjs: aligned with the current
  package-manager contract (package.json manifests, installPolicy,
  packageManagerVersion 1|2, manifest v2 tasks/workflows, backend-github
  sources). Same content as #152; whichever merges first rebases clean.
- Card files (use-case.json, README.md, marketing.md) included per repo
  structure; slug added to catalog excluded[] - not a public-site use case.

CI note: the fleet-approval gate fires (new auto-installable package) and
needs the runneth-fleet-change-approved label after core engineering
approval.

* refactor(voc-data-pull): move under packages/ per installer package convention

* fix(voc-data-pull): resolve review findings - id-keyed ticket paths, honest date-bound claims, PII disclosure, fleet-gate fingerprint

* fix(voc-data-pull): render metadata as fenced yaml block instead of frontmatter

* feat(voc-data-pull): human-readable file layout - headline, bold-label header, collapsed metadata; drop raw payloads

* feat(voc-data-pull): backend-github source + activation package instruction

Switch the index entry's package source to backend-github per repo package
conventions, so VM artifact fetches route through the backend cache instead
of raw GitHub (bump indexRevision to 2026-07-22-01).

Add a package_instruction resource (instructions/activation.md) that lands
in the agent's standing instructions on install: Runneth offers the first
pull when a covered VoC platform is connected and no data-sources pull
exists, runs the skill on request, and never starts a pull without user
confirmation. Install stages files only; this closes the awareness gap
without auto-running anything.

* fix(voc-data-pull): date window is the coverage contract - page cap is per-run batching, never a coverage limit

* feat(voc-data-pull): add Reddit - integration:reddit category, community_post source type, recipe + template

* feat(voc-data-pull): routine-based recurring sync via activation instruction

activation.md: routine absence triggers setup - creates voc-sync-<platform> (cron 0 6 * * *), kicks the backfill run, silent-success/delivered-failure delivery, Junip key gate; pulls never run in-conversation. SKILL.md: new Recurring sync runs section owns the incremental window (empty folder = trailing 12 months, else newest created_at minus 2 days, updated_at for tickets), multi-account iteration, disconnect no-op; dropped the confirm-before-starting gate. README updated to match.

* fix(voc-data-pull): review fixes - id-keyed contract, per-source write policy, routine routing

SKILL.md: the id-keyed filename contract now survives existing folder conventions (adopt surrounding layout, keep id-keyed names); explicit re-pull write policy per source type (reviews skip, tickets overwrite on fresher updated_at, comments/posts overwrite inside the pull window since engagement mutates); user pull requests route through the sync routine; description covers Reddit and community posts. activation.md: routine prompt defers run behavior to the skill's recurring-sync rules instead of restating it; first kick described as a sync run whose window the skill determines. README: drop the stale no-automatic-post-install-trigger gap, describe the header shape directly, point the platform list at the Step 1 table.

* fix(voc-data-pull): move output to data-sources/voc/<platform>/ with flat type-prefixed filenames

* feat(voc-data-pull): manual install policy, ask-only sync setup

installPolicy flips to manual - the team installs per VM (package intent add-optional voc-data-pull + package sync); updatePolicy stays auto so installed copies track main. Setup is strictly manually triggered: the recurring-sync procedure (routine-absence check, routine add with cron 0 6 * * *, first-run kick, Junip gate, never pull in-conversation) moves into SKILL.md and runs only when asked, directly or via an onboarding run - nothing happens just because a platform is connected. The activation instruction slims to a pointer stating the same. Once set up, the daily routine refreshes data on its own. Categories retained for a future auto-install flip.
@motionBuilderEric Eric Smith (motionBuilderEric) changed the title feat(aligned-onboarding): replace v1 package with v2 Meta onboarding … feat(aligned-onboarding): v2 Meta onboarding package + VoC data pull, corpus-search removed Jul 23, 2026
…amily lanes as forward path) (#175)

* feat(aligned-onboarding): add Knoweth organize part

* chore(aligned-onboarding): register knoweth part in install-config (v2.2.0)

* docs(aligned-onboarding): add Knoweth organize step to run order

* feat(knoweth): expand organize part with save routing, decide-lanes/config, standard specs, front-matter, repair, validation, gotchas (option B, consistent)

* feat(knoweth): v1.0 - de-draft, activation MERGE INSTRUCTIONS, why-not-in-Knoweth, no-Knoweth-aware, user/workspace lane scenarios, org-type adaptation, standard-spec detail, maintenance section

* feat(knoweth): activation checklist, prod/pre-Knoweth note, org-type detection step

* docs(aligned-onboarding): make Knoweth run-order step name both guard merges

* feat(aligned-onboarding): v2.3.0 - Cacheth is the creative system of record, no per-creative brain files

- Rewrite the Creative Attribution playbook as the creative-content-layer contract: what Cacheth holds per creative, the query paths (Knoweth injection first, then the motion cache CLI), and the naming decode - all local, no API calls, nothing written to the brain
- Fold the naming decode into account-context.md Field 4 (no separate taxonomy file); Field 4 starts from the Step 1 provisional table
- Reframe per-creative-file rules from prohibition to ownership: person-requested snapshots allowed, sweep asks before archiving
- Validation (v1.3) gates on cache coverage instead of files and adds the show-the-work loop rule
- Upgrade the Knoweth answer standard: read the naming decode before name filters, route structural vs creative questions by signal, frame performance + VoC as one system, state filter/signal/unconfirmed on analytical answers
- Stage the Cacheth command reference beside the Data-Query Guide; reconcile all cache command syntax against it

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: rachelgrant27 <rgrantsteinkrauss@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@motionBuilderEric Eric Smith (motionBuilderEric) changed the title feat(aligned-onboarding): v2 Meta onboarding package + VoC data pull, corpus-search removed feat(aligned-onboarding): v2 onboarding folder - Meta (Cacheth-first), VoC data pull, Knoweth organize; corpus-search removed Jul 24, 2026
rachelgrant27 and others added 5 commits July 24, 2026 13:44
…ributes, add name-level filter disambiguation, trim Data-Query Guide to Meta-only

Creative Attributes describes attributes of the creative, not spend
attribution. New name-level contract closes a live failure mode where
product names were read as campaign references: the Data-Query Guide
gains a "Which name level to filter on" section, Field 4 (v1.22)
detects and confirms where product names live per account, the Step 1
decode hands over provisional token placement, and validation (v1.4)
probes the read with a "show me all our [product] ads" starter
question. Data-Query Guide drops the TikTok insights section, the
brand-specific metric gotchas, and the workspace-goal /
spend-threshold commands the package's scope rules already forbid.

Co-authored-by: Cursor <cursoragent@cursor.com>
…23 (naming decoder JSON, Field 9 four captures)

Reconciles parallel work authored against the pre-merge base:

- Field 4 writes an operational naming decoder to /agent/brain/meta/naming-decoder.json:
  typed positions (segment_filter / context_only / unique_id / metadata_do_not_filter)
  mapped to Meta query fields, LP-reference decode (RLP/LP/CAP, do-not-filter), and the
  _VALUE_ filter-translation rules. Field 4 stays the interpretation owner; the decoder
  is its appendix, referenced from account-context.md, not embedded
- Field 9 restructured around four captures: ranking metric, CPA target (commentary,
  not a filter), winner/cut criteria applied only to explicit winner/cut questions
  (spend floor, min days, optional tiers with the rank-then-classify rule), and the
  default reporting window; supersedes v1.21's mandatory always-ask spend-floor script
- Merged with the v1.22 product-name-placement additions and the Step 1 provisional
  decode handoff; playbook, README, Knoweth answer standard, skeleton, and validation
  updated to point at the decoder

Co-authored-by: Jose <jose@motionapp.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…l referenced by the 2.4.0 install entry

Co-authored-by: Cursor <cursoragent@cursor.com>
…k-sources named, raw-VoC save exemption, Reddit full-window contract
…as ACB v1.24 + validation v1.5; README covers the validation step

Field 10 (reporting structure and marketing calendar) synthesizes from
Fields 4, 7, and 9 - no new Motion pull - with an auto-detected
calendar from the naming decoder's campaign-type and launch-date
positions (read from naming-decoder.json, never an assumed offset) and
four standard deck sections as a starting hypothesis. Scope rule:
Field 10 gates the deck, not validation - the question loop runs on
the nine required fields; no deck without a confirmed Field 10, and an
unconfirmed spec runs its two beats at deck time. Validation v1.5
pre-fills the deck build from the spec, leads the deck-first door with
it, and anchors starter questions 2 and 4 in the confirmed dimensions
and calendar. Jose's stale-base regressions (Creative Corpus paths,
missing product-name placement and tier rule) were discarded.

Also reconciles the README with Eric's operational intro: adds the
missing Meta Validation detail section, the validation step in the
install/run order, and the validation-is-the-catch relation bullet.

Co-authored-by: Cursor <cursoragent@cursor.com>
@rachelgrant27 rachelgrant27 changed the title feat(aligned-onboarding): v2 onboarding folder - Meta (Cacheth-first), VoC data pull, Knoweth organize; corpus-search removed feat(aligned-onboarding): v2 onboarding folder - Meta three steps + Field 10 deck spec (Cacheth-first), VoC data pull, Knoweth organize, ad-performance skill; corpus-search removed Jul 24, 2026
… pull to 17 platforms

Add a post_install trigger to install-config.json (v2.5.0) backed by a new
post-install.md: installing the package now automatically runs the reachability
check, sets up the recurring VoC sync for every available platform (backfills
kicked in the background), and starts the Meta Creative Attribution and Account
Context Brain steps - zero human prompt required. Knoweth organize still fires
from its own gates. README's trigger section is rewritten to describe this
automatic sequence, with per-part fire-at-install vs on-demand labels, and VoC
wording fixed from connected to available (stored keys and Motion native
count).

VoC skill: expand coverage from 9 to 17 platforms with doc-grounded recipes for
Zendesk, Klaviyo, Attentive, Gong, Hotjar, Discord, YouTube, and Reviews.io;
fold in registry live-probe learnings (Junip unblocked and live-verified, Yotpo
since_date is the real date bound, Trustpilot/Klaviyo/Gong/Gorgias corrections).
Add the Step 2 resilience mandate: the live API is the truth and a stale recipe
must never stop a pull. Single-source the docs - per-platform evidence and
caveats live only in recipe headers, and the coverage contract (12-month
window, page-cap resume, coverage reporting) is owned solely by SKILL.md's
hard boundaries; the stale updated_at_min references are gone.
…ecipe list - unknown platforms pull live-adapted

An unknown VoC platform is never skipped. The skill's scope gate changes
from "is it on the covered list" to "is the data customer voice": any
reachable reviews/support/survey/community platform with no recipe resolves
its connection path like the others (proxy or secure-fetch with the
registry guide's auth shape) and pulls through a new no-recipe path in
Step 2 - find the listing endpoints from the live API and docs, discover
pagination from the response, map the real payload onto the unified
record, pull the raw data you find, and report "no recipe - live-adapted"
with the calls used so a recipe can be written from the run. A missing
recipe is never a reason to stop; skipped can only mean not reachable,
not VoC, or dead auth.

Priority stays with the known platforms: recipe'd platforms are handled
first, and a platform that has a recipe is always pulled through its
recipe, never freelanced. Hard boundaries (read-only, 12-month window,
id-keyed files, PII null) and the output contract apply identically to
no-recipe pulls. Sync setup and the key-auth gate cover no-recipe
platforms; post-install's reachability check and the README state the
scope rule; the recipes header points platforms without a section at the
no-recipe path.
…T-vs-WHY evidence split, ACB fill-in output schema + Field 10 wiring

Rolls up v2.8.0-2.9.0 (rebased over Eric's v2.7.0 auto-fire + 17-platform VoC push): creatives always render as a gallery with decoder-normalized names (Data-Query Guide contract, validation v1.6 loop rule, skill output); the ad-performance skill's trigger broadened from single-ad to ads in general with an Analyzing Across Ads section; ACB v1.26 adds the three-part required output schema for the fill-in presentation and wires Field 10 into the flow and saved file (Step 5, deck-spec section); golden rule 10 splits evidence - live metrics answer WHAT, Cacheth creative content and VoC answer WHY; audit cleanup (single-ad README label, stale workspace-setup intro).

Co-authored-by: Cursor <cursoragent@cursor.com>
…xes, changelogs relocated to repo-only CHANGELOG.md

- v2.9.1: WHAT-vs-WHY section trimmed to evidence homes + pairing principle
- v2.10.0: answering-posture guidance (judgment over rules) in the Data-Query Guide; validation v1.7 register corrections; ACB v1.27 answer-register note
- v2.11.0: validation v1.8 autosave/resume, MVCE-to-Knoweth handoff, Q4 rework with single-pool fallback; knoweth v1.1 gate-2 file-based VoC fallback; gallery mediaUrl warning
- v2.11.1: per-doc changelog histories moved out of staged docs into aligned-onboarding/CHANGELOG.md (maintainer-only, never staged to customer brains)

Co-authored-by: Cursor <cursoragent@cursor.com>
…name, deterministic fast install (#179)

* feat(aligned-onboarding): deterministic install via package.json manifest + staged guard files

Replace install-config.json with a real package manifest so 'package install'
stages all files mechanically in one call. Ship the four /agent/user.md guard
blocks as ready-made staged files under guards/ merged in one full-file write
at post-install. No behavior changes to any part.

* fix(aligned-onboarding): fire post-install from activation prompt context; mandate github: ref form

* perf(aligned-onboarding): scripted guard merge, kicked-run checklist, no edit tool on staging VMs

* feat(aligned-onboarding): register as indexed package for intent add + sync install lane

* fix(aligned-onboarding): single-Write guard merge with anti-duplication check; always create voc-sync-meta-ads; persist autofill

* docs(aligned-onboarding): headline install-by-name from the package index

* feat(aligned-onboarding): v2.9.0 - presenting-creatives contract, WHAT-vs-WHY evidence split, ACB fill-in output schema + Field 10 wiring

Rolls up v2.8.0-2.9.0 (rebased over Eric's v2.7.0 auto-fire + 17-platform VoC push): creatives always render as a gallery with decoder-normalized names (Data-Query Guide contract, validation v1.6 loop rule, skill output); the ad-performance skill's trigger broadened from single-ad to ads in general with an Analyzing Across Ads section; ACB v1.26 adds the three-part required output schema for the fill-in presentation and wires Field 10 into the flow and saved file (Step 5, deck-spec section); golden rule 10 splits evidence - live metrics answer WHAT, Cacheth creative content and VoC answer WHY; audit cleanup (single-ad README label, stale workspace-setup intro).

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(aligned-onboarding): v2.11.1 - answering posture, field-audit fixes, changelogs relocated to repo-only CHANGELOG.md

- v2.9.1: WHAT-vs-WHY section trimmed to evidence homes + pairing principle
- v2.10.0: answering-posture guidance (judgment over rules) in the Data-Query Guide; validation v1.7 register corrections; ACB v1.27 answer-register note
- v2.11.0: validation v1.8 autosave/resume, MVCE-to-Knoweth handoff, Q4 rework with single-pool fallback; knoweth v1.1 gate-2 file-based VoC fallback; gallery mediaUrl warning
- v2.11.1: per-doc changelog histories moved out of staged docs into aligned-onboarding/CHANGELOG.md (maintainer-only, never staged to customer brains)

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(aligned-onboarding): v2.12.0 - unify content lane (2.11.1) with installer lane (2.8.4)

---------

Co-authored-by: rachelgrant27 <rgrantsteinkrauss@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@motionBuilderEric Eric Smith (motionBuilderEric) changed the title feat(aligned-onboarding): v2 onboarding folder - Meta three steps + Field 10 deck spec (Cacheth-first), VoC data pull, Knoweth organize, ad-performance skill; corpus-search removed feat(aligned-onboarding): v2 Meta onboarding package - installable by name Jul 25, 2026
@motionBuilderEric
Eric Smith (motionBuilderEric) force-pushed the eric/aligned-onboarding-v2-meta-package branch from 335dfe4 to 19a28d6 Compare July 25, 2026 19:47
@motionBuilderEric
Eric Smith (motionBuilderEric) force-pushed the eric/aligned-onboarding-v2-meta-package branch from 77adbdb to fce81c3 Compare July 26, 2026 00:36
… on a human's yes

- new onboarding-walkthrough skill (v1.0) owns the fill-in presentation; fires on "Are you ready to begin your onboarding?"
- ACB package (v1.29) drops the output schema + Steps 2-5, becomes the pure data layer; v1.28 adds format-per-data and the Field 4 inline decoder table rule
- post-install autofills and persists silently, ends with the verbatim invitation
- account-context guard v2 offers the walkthrough; Creative Attributes scope confirmation silent inside post-install
- package.json + package-index.json synced to 2.13.0

Co-authored-by: Cursor <cursoragent@cursor.com>
…north-star" renamed to plain language

- post-install step 6 gains a literal contract: one status line per part + question count, verbatim skeleton, no findings or question text before the invitation (first 2.13.0 field run leaked both)
- ACB v1.30 / validation v1.9: "north-star" -> "primary conversion event" and "priority campaign(s)" in all customer-facing phrasing
- package.json + package-index.json synced to 2.13.1

Co-authored-by: Cursor <cursoragent@cursor.com>
…, raw github source

Rename aligned-onboarding to meta-and-voc-onboarding (id, folder, staged
paths, all docs; the immutable pre-cleanup tag keeps its name). Version
policy is now a simple integer bumped once per package update, starting
at 1, with the CHANGELOG collapsed to that entry. The index entry moves
to categories: [] and a raw github source. Docs replace bare
`integrations status` with `integrations status --app <slug>` sweeps and
fix the `n run --url` typo to `secure-fetch run --url`. The validator
matches the runtime contract: opaque non-empty versions, github-only
sources, empty categories allowed, fleet approval checked only on
pull_request events.
@motionBuilderEric Eric Smith (motionBuilderEric) changed the title feat(aligned-onboarding): v2 Meta onboarding package - installable by name feat(meta-and-voc-onboarding): Meta + VoC onboarding package - installable by name Jul 27, 2026
@motionBuilderEric
Eric Smith (motionBuilderEric) force-pushed the eric/aligned-onboarding-v2-meta-package branch from 1d78d8d to e70505c Compare July 27, 2026 22:00
rachelgrant27 and others added 8 commits July 27, 2026 18:38
…edback heals context

- validation v1.10: durability routing for every piece of feedback (judgment rules -> ACB fields, standing prefs -> register/Field 10/deck record, current-state -> answer only, one-offs -> current render, revert on refresh); deck feedback routes to fields and the deck regenerates from context, never hand-edited; MVCE needs every question clean (corrections re-open only what they touch) plus spec-level deck approval; loop continues past MVCE with no scheduled check-ins
- validation gate guard v3: deck change requests are context corrections, always-on
- ACB v1.31: Field 10 named as the landing spot for structural deck feedback

Co-authored-by: Cursor <cursoragent@cursor.com>
…th indexing model

Verified against agent-builder origin/staging (motion.ts, cache/exporters.ts,
cache/storage.ts) before editing.

- Access check first: playbook Step 2 opens with one
  `motion cache status --workspace-id <workspaceId>` call; on error, record the
  blocker and stop — no retry loops against the data commands. Same status-first
  note in the command reference overview.
- Fix the naming-decoder export flow: `motion cache export-summaries` returns a
  ./workdir wrapper, not the JSONL corpus. Docs now read the Meta corpus path
  from `exportPaths.meta` (command output) or `.providers.meta.path` (wrapper
  file) and run `jq -r '.adNames[]?'` against that per-provider file. Old
  instructions ran jq against the wrapper and produced an empty name list.
  Every Step 2 command now carries an explicit `--workspace-id`.
- Narrow data-surface claims: export and search records carry ad metadata, copy,
  landing/media URLs, and summary sections only. Transcripts and glossary/AI
  tags live solely on the full record via `motion cache get-creative`; removed
  "all transcripts / glossary tags" claims and the glossary jq example on
  exports, and dropped the transcript-fragment claim from search.
- Consistent Knoweth<>Cacheth model everywhere: Knoweth indexes the summary
  artifacts Cacheth generates (identity, ad names, copy, summary text), never
  complete records. Replaces both the "surfaced through Knoweth" overclaim and
  the "NOT indexed by Knoweth" underclaim across the package.
- Frame Cacheth as a hydration layer behind the motion CLI, transparent to the
  agent.
- Correct storage claims: only the wrapper lands in ./workdir; per-provider
  export files live in Cacheth's own storage.

Deliberately unchanged: guards/meta-validation-gate.md and its byte-identical
copy in meta-validation-onboarding-package.md (guard blocks merge verbatim into
/agent/user.md; changing them is a guard-versioning decision).

Staging validation:
- Positive path (cache-enabled orgs): status check ran once before export; the
  agent resolved the real corpus from exportPaths.meta, ran jq against the
  per-provider JSONL (never the wrapper), and decoded naming systems from
  hundreds of real ad names. The old empty-list failure did not reproduce, and
  no output claimed transcripts or glossary tags from export/search.
- Negative path (org with the sandbox Motion cache disabled, exercised
  deliberately): the status-first gate behaved exactly as written — the agent
  ran `motion cache status` once, quoted the playbook rule ("record the
  blocker and stop this step — do not loop retries"), recorded the blocker in
  the account-context file, and never touched the data commands or drew a
  false "no ads" conclusion.
…ed by staging runs

Four fixes to the install-time sequence, each grounded in a staging test
observation:

- Step 1 names the sanctioned stored-secret probe: the secret store cannot be
  listed (runtime refuses Bash reads of /agent/.runtime/secrets; neither
  `secret` nor `secure-fetch` has a list command), so probe each platform's
  documented secret key and treat "secret not available" as not stored. Same
  note added to the voc-data-pull skill's availability-check paragraph.
- Step 4 names the Creative Attributes procedure path
  (meta/meta-creative-attributes-playbook.md, a brain document) so agents stop
  probing for a nonexistent creative-attributes skill directory.
- Step 5 now matches the account-context playbook it delegates to: the brain
  file is written in the playbook's saved-file format (prose reference
  document) and indexed in /agent/INDEX.md with the playbook's aliases at
  install time. The old step text demanded terse facts and deferred INDEX.md,
  contradicting the playbook; agents consistently sided with the playbook.
- Step 6 closes two report-leak gaps: decoder shape counts ("a 5-position
  decoder", "4 schemas detected") are explicitly decoder detail, and the
  status-only discipline extends to the progress narration around the report,
  not just the report body.
…VM path

The package manifest flattens the repo's meta/ folder into
/agent/brain/meta-and-voc-onboarding/, so the playbook lives at
meta-and-voc-onboarding/meta-creative-attributes-playbook.md on the VM. Step 4
now names that staged path and forbids improvising the Creative Attributes step
from live Motion pulls when the playbook cannot be read.
…ets mechanical

Staging runs followed the descriptive wording loosely: one agent concluded
'no stored secrets' from a refused directory read without running a single
key probe, and another appended the detected naming convention to the
readiness report's Creative Attributes bullet. Step 1 now requires a
secret-run probe per key-stored platform before the step is done and rules
out indirect checks explicitly. Step 6 now states the template bullets are
filled only at their angle-bracket slots, with the allowed states as the
only permitted extensions.
…ace and placeholder scope

Step 3 told installers to replace every literal <workspaceId> token without
saying which workspace is the target; a staging run anchored on a stale id
from removed guard blocks and stamped the guards for the wrong workspace,
and the 'every token' rule also collided with the knoweth-organize guard's
generic project:<workspaceId> lane syntax. The target is now defined as the
workspace this conversation's Motion commands resolve to, substitution is
scoped to the guard headers, and the lane syntax stays untouched alongside
the other placeholders.
…add-optional + sync

The package description (manifest and index entry, kept byte-identical) now names the
canonical install path: an agent runs `package intent add-optional meta-and-voc-onboarding`
followed by `package sync`. The README's intro paragraph and "Install and run order" step 1
said the install conversation stages files "with one `package install` call" - that is the
branch-testing command, not the indexed flow. Both now describe the intent + sync pair;
explicit `package install github:...` remains documented only as the branch/PR-testing
variant.
@motionBuilderEric
Eric Smith (motionBuilderEric) force-pushed the eric/aligned-onboarding-v2-meta-package branch from 9a7e2e0 to fe9ab13 Compare July 28, 2026 13:08
…y install path

The intent add-optional + sync flow cannot install this package: sync's manual-policy
gate only admits packages with a "selected" sync reason, and selected intent is recorded
only by an explicit package install call - optional intent resolves as "optional" and is
skipped while installPolicy stays manual. v1 therefore ships beta as a manual install:
one explicit package install of the GitHub source at #main, which records selected
intent (VM rebuilds reinstall it) while updatePolicy: auto rolls out merged updates.
The package README (install banner, canonical message, install path, run order), the
root README section, the CHANGELOG v1 entry, and the description field in the manifest
and index entry all describe that flow; branch refs remain the branch/PR-testing
variant. An intent- or baseline-category-based install ships as a new package version
if wanted.
… install sweep

Readiness report (post-install step 6): the template itself mandated the count
leak every install reproduced ("autofilled <N> of 9 fields; <M> questions need a
human"). The Account Context Brain bullet is now status-only ("done - remaining
gaps wait for the walkthrough"), the version label is dropped from the header
line (installs hallucinated four different labels for one artifact), and the
no-findings rule is now a blanket no-numbers rule (no counts, tallies, sample
sizes, or version labels anywhere in the report or the narration around it)
with a literal wrong/right example.

PR-URL resolution (README branch testing): step 1 prescribed gh pr view, which
fails with a 409 on every VM (GitHub is never connected there). The step now
says so and gives the working path: curl the public pulls API and read
.head.ref - the same fallback agents discovered on their own.

Staged paths (README): the five per-doc "File: meta/<doc>.md" lines and the
knoweth doc pointer were repo source paths, but the manifest stages those docs
flat; on-VM agents resolving them hit ENOENT. Each now carries its staged
/agent/brain/meta-and-voc-onboarding/ path.

One workspace per sandbox (post-install + playbook): the playbook's
multi-workspace section prescribed per-workspace-slug brain paths that the
guards and post-install never supported, so a second-workspace install had to
improvise (observed on staging: hand-copied brain files and rewritten guard
headers, leaving the first workspace unreachable). Both docs now state the one
Meta workspace per sandbox contract: same-workspace sentinels mean the sequence
already ran; different-workspace sentinels mean stop and report - never rewrite
guard headers or copy brain files.
…he account-context playbook path

Both staging verification installs of the tightened readiness report produced
the same single deviation: a part that completed through a fallback rendered
as "done - <explanation>" (Cacheth disabled, decode pulled from ad names
instead). Step 6 now states that "done" is terminal - a part that completed
through a fallback or degraded path is still exactly "done", and the how
belongs in the brain file - and enumerates "blocked - <reason>" among the
allowed bullet states.

Step 5 referred to "the account-context playbook" without naming its file;
one install guessed account-context-playbook.md, hit ENOENT, and recovered
via ls. The step now carries the staged path.
…llback ladder (package v2)

Cacheth stays first for creative attributes; the live motion meta insights
content flags become a failure-only fallback with code-verified semantics
(sandbox-level MOTION_CACHE_ENABLED, explicit disabled message). Cache-disabled
sandboxes no longer permanently gate validation, brain organize, or the naming
decode (validation gate v4, knoweth-organize guard v3, validation doc v1.11).
Metrics pulls stay lean and join cached content on creativeId. Adds the
agent-builder PRD for enforcing the fallback in the CLI.

Co-authored-by: Cursor <cursoragent@cursor.com>
Turn synced customer language into durable, evidence-backed insight that validation and future analysis can reuse without running the audit automatically.

Co-authored-by: Cursor <cursoragent@cursor.com>
…orkspace orgs (#186)

* feat(meta-and-voc-onboarding): workspace-scoped onboarding v2 - multi-workspace orgs onboard additively

One org VM can hold several Motion workspaces, but v1 wrote every outcome to
shared org-wide paths (/agent/brain/meta/, /agent/brain/data-sources/voc/),
so only one workspace per org could hold Meta context and a second onboarding
either overwrote the first or blurred two brands' customer voice into one
corpus. v2 re-roots everything the package produces under a per-workspace
folder and makes onboarding a second workspace a normal, additive operation.

Layout:
- All outcomes land in /agent/brain/<workspace>/ (workspace name lowercased,
  spaces as hyphens): account-context.md, naming-decoder.json, validation.md,
  _tag-vocabulary.md, and VoC data under data-sources/voc/<platform>/.
- /agent/INDEX.md and /agent/brain/_changelog.md stay org-wide with entries
  naming their workspace.

Guards (account-context-guard v3, meta-validation-gate v4, knoweth-organize
v3, knoweth-brain v3):
- Now workspace-agnostic: merged into /agent/user.md verbatim, once per VM,
  with no install-time token substitution. Each guard defines the workspace
  folder and resolves it per conversation, and forbids reading another
  workspace's folder to answer for this one.

Activation:
- Post-install records each onboarded workspace in a
  runneth:meta-voc-onboarded roster block in /agent/user.md; the activation
  instruction checks the roster for this conversation's workspace, so a
  second workspace on an already-guarded VM still gets its own install run.
  Guard sentinels alone are no longer treated as "already onboarded".

VoC routines:
- One routine per platform per workspace, named voc-sync-<workspace>-<platform>
  (a bare voc-sync-<platform> would collide VM-wide and mix two brands' data).
- Routine prompts carry the workspace folder path, workspace id, and pinned
  account id literally - routine runs execute with no workspace attached, so
  nothing is resolvable at run time.

VoC account pinning:
- Platform accounts are org-level with no workspace tag, and one org can hold
  several accounts of the same platform (or genuinely share one) - verified
  against the builder: pipedream_account is unique on (sandbox, app, account)
  and every proxy call requires --account <accountId>.
- Setup pins a human-confirmed account per workspace per platform: the agent
  lists accounts and asks which belongs to this workspace, even when only one
  is listed (a lone connection may belong to a different workspace). Sharing
  is legitimate; a recorded slice filter scopes shared accounts. Auto-pin only
  when the org has exactly one Motion workspace. No connection-driving: an
  unconnected platform is recorded as pending and set up on ask later.
- Sync runs pull only the pinned account and never fall back to another
  connection; a disconnected pin reports and stops. Replaces the old "iterate
  every connected account" rule, which would have re-blurred workspaces.

Install flow:
- Auto-pinnable platforms and Meta ad comments kick their backfills
  immediately; platforms needing confirmation are asked in one compact block
  before the readiness report, show as "waiting on a person - account
  confirmation", and get their routines created when the answer arrives.
- Readiness report header names the workspace (identity, not a finding).

Version 2 in package.json and package-index.json, descriptions synced,
CHANGELOG entry added.

* fix(meta-and-voc-onboarding): make the workspace slug rule mechanical

The MrBeast staging install burned thinking time deciding whether
"Mr. Beast" slugs to mr-beast or mr.-beast: "lowercased with spaces as
hyphens" is non-deterministic for names with punctuation, and two
conversations resolving different slugs would split one workspace's brain
into two folders.

Every <workspace> definition site (4 guards + their embedded copies,
post-install, activation, README, playbook, ACB package, voc skill,
knoweth doc) now states one mechanical rule: lowercase, every run of
characters that is not a-z or 0-9 becomes one hyphen, trim leading and
trailing hyphens ("Huel EU" -> huel-eu, "Mr. Beast" -> mr-beast).

* fix(meta-and-voc-onboarding): move Meta interpretation files under data-sources/meta and route the later VoC audit

Meta interpretation files (account-context.md, naming-decoder.json,
validation.md, _changelog.md) now live under
/agent/brain/<workspace>/data-sources/meta/, siblings of data-sources/voc/.
The later Voice of Customer audit skill writes
/agent/brain/<workspace>/data-sources/voc/voice-of-customer-audit.md; raw
pulls and post-install never create it. All skills, guards, playbooks, and
docs updated to the fully scoped paths.

* fix(meta-and-voc-onboarding): define reinstall resume semantics and close review gaps

An explicit reinstall or upgrade re-runs post-install as a resume, never a
restart: guard merge keeps its skip rule, existing workspace-named routines
and brain files are kept, and the roster never lists a workspace twice. The
README names the workspace-scoped output path instead of the old brain-root
meta folder, and the routine prompt template gains the Motion-native
(meta-ads) variant alongside the pinned-account and stored-secret ones.

* docs(meta-and-voc-onboarding): correct stale doc/guard version cites in changelog

---------

Co-authored-by: Eric Smith <eric@motioncreative.co>
…mmary in walkthrough

Fixes from the first real customer-VM install, folded into the workspace-scoped v2:

- Field-to-command map names the real ads-grain extraction keys (verified against
  agent-builder's response schemas): ad rows carry no adName/campaignName/adsetName;
  identity lives at `name` and in associatedObjectDetails, populated only with
  --include-associated-objects. Field 4 decodes from the Creative Attributes handoff
  or adnames grain; response-shape note added to the map and the Data-Query Guide;
  the playbook's cache-disabled decode fallback switches to adnames grain.
- ACB navigation: `## Field N` headings, contents section, read-by-section note.
- account-context.md file-metadata block gets an explicit YAML template
  (fields_confirmed, field_statuses, open_flags, naming_decoder).
- Onboarding walkthrough now proactively presents a per-integration Voice of
  Customer summary after the account-context questions, explains what the audit
  entails, and hands the person the manual trigger (workspace-scoped paths and
  voc-sync-<workspace>-* routine names).

Co-authored-by: Cursor <cursoragent@cursor.com>
…questions and pre-answers in batch (doc v1.13)

The validation loop now generates its question set from the confirmed account
context instead of a fixed list: parameterized baseline questions plus one
derived question per filterable naming-decoder dimension (>=3 creatives,
meaningful 7-day spend), a Field 9 winner/cut probe, and a Field 7
testing-pipeline question. Answers pre-fill in batch before any are shown -
one no-limit primary insights pull (totalCount checked), a testing-bucket
pull, a conditional lifetime pull for lifetime spend floors, and creative
content through the content-layer ladder - then the full Q&A presents
together under a fixed answer format contract (verbatim question, bullets,
table at 3+ comparisons, gallery with decoded names; Winner/Watch/Cut only
on the winner/cut question). validation.md tracks generated and confirmed
account-specific question counts. No guard changes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants